home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / dev / lang / Python152_Src.lha / Python152_Source / Amiga / _allocufb.c next >
C/C++ Source or Header  |  1994-09-30  |  1KB  |  56 lines

  1. RCS_ID_C="$Id: _allocufb.c,v 4.1 1994/09/29 23:09:02 jraja Exp $";
  2. /*
  3.  *      _allocufb.c - get a free ufb (SAS/C)
  4.  *
  5.  *      Copyright © 1994 AmiTCP/IP Group, 
  6.  *                       Network Solutions Development Inc.
  7.  *                       All rights reserved.
  8.  */
  9.  
  10. #include <ios1.h>
  11. #include <stdlib.h>
  12. #include <errno.h>
  13.  
  14. /*
  15.  * Allocate new ufb, which is returned as return value. The corresponding fd
  16.  * is returned via fdp.
  17.  */
  18. struct UFB *
  19. __allocufb(int *fdp)
  20. {
  21.   struct UFB *ufb, *last_ufb;
  22.   int         last_fd = 0;
  23.  
  24.   /*
  25.    * find first free ufb
  26.    */
  27.   last_ufb = ufb = __ufbs;
  28.   while (ufb != NULL && ufb->ufbflg != 0) {
  29.     last_ufb = ufb;
  30.     last_fd++;
  31.     ufb = last_ufb->ufbnxt;
  32.   }
  33.   /*
  34.    * Check if need to create one
  35.    */
  36.   if (ufb == NULL) {
  37.     if ((ufb = malloc(sizeof(*ufb))) == NULL) {
  38.       errno = ENOMEM;
  39.       return NULL;
  40.     }
  41.     ufb->ufbnxt = NULL;
  42.     ufb->ufbflg = 0;        /* => unused ufb */
  43.  
  44.     if (last_ufb == NULL)
  45.       __ufbs = ufb;
  46.     else
  47.       last_ufb->ufbnxt = ufb;
  48.     
  49.     *fdp = __nufbs++;
  50.   }
  51.   else
  52.     *fdp = last_fd;
  53.   
  54.   return ufb;
  55. }
  56.